package com.gt.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gt.admin.domain.QuestionnaireDetail;
import com.gt.admin.domain.QuestionnaireModel;
import com.gt.admin.domain.apiVO.Version;
import com.gt.admin.domain.vo.QuestionnaireModelVO;
import com.gt.admin.mapper.QuestionnaireDetailMapper;
import com.gt.admin.mapper.QuestionnaireModelMapper;
import com.gt.admin.service.IQuestionnaireModelService;
import com.gt.admin.utils.Effect;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 筛查问卷service
 */
@Service
public class QuestionnaireModelServiceImpl extends ServiceImpl<QuestionnaireModelMapper, QuestionnaireModel> implements IQuestionnaireModelService {
    @Autowired
    private QuestionnaireModelMapper questionnaireModelMapper;
    @Autowired
    private QuestionnaireDetailMapper questionnaireDetailMapper;

    /**
     * 查询版本信息
     */
    @Override
    public List<Version> selectVersion(Long superId) {
        return questionnaireModelMapper.selectVersion(superId);
    }

    /**
     * 按superid查询筛查问卷模板
     */
    @ApiOperation("按superid查询问卷模板")
    public QuestionnaireModelVO selectBySuperId(Long superid){
        LambdaQueryWrapper<QuestionnaireModel> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(QuestionnaireModel::getSuperId, superid);
        List<QuestionnaireModel> list = list(queryWrapper);
        QuestionnaireModelVO questionnaireModelVO = new QuestionnaireModelVO();
        questionnaireModelVO.setQuestionnaireModelList(list);
        for (QuestionnaireModel model : list) {
            if (model.getEffect() == Effect.Effective){
                questionnaireModelVO.setChooseVersion(model.getVersion());
            }
        }return questionnaireModelVO;
    }

    /**
     * 按id删除筛查问卷，及其关联的分类和指标
     * @param id
     * @return
     */
    @Transactional
    @Override
    public boolean deleteById(Long id) {
        boolean flag = removeById(id);
        LambdaQueryWrapper<QuestionnaireDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(QuestionnaireDetail::getQueId, id);
        questionnaireDetailMapper.delete(queryWrapper);
        return flag;
    }

    /** 更新版本信息，并更新生效版本号 */
    @Transactional
    @Override
    public boolean updateByVersion(QuestionnaireModelVO questionnaireModelVO) {
        Long version = questionnaireModelVO.getChooseVersion();
        boolean flag = false;
        List<QuestionnaireModel> questionnaireModelList = questionnaireModelVO.getQuestionnaireModelList();
        Long superId = questionnaireModelList.get(1).getSuperId();
        LambdaUpdateWrapper<QuestionnaireModel> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(QuestionnaireModel::getEffect, Effect.Invalid)
                     .eq(QuestionnaireModel::getSuperId, superId);
        update(updateWrapper);
        for (QuestionnaireModel model : questionnaireModelList) {
            if(model.getVersion().longValue() == version.longValue()){
                model.setEffect(Effect.Effective);
                flag = saveOrUpdate(model);
            }
        }return flag;
    }
}
